library(ggplot2)
library(dplyr)
library(gapminder)
11 Pakiety ggplot2 i gapminder. Podstawy animacji
Grzegorz Kończak
11.1 📘 Załadowanie pakietów i podstawowe informacje o zbiorze gapminder
11.1.1 ❕ Załadowanie wymaganych pakietów
11.1.2 ️✔️️Dla konstrukcji wykresów w tej części wykorzystan* zbiór gapminder
z pakietu gapminder
11.1.3 Informacja o zbiorze gapminder
summary(gapminder)
country continent year lifeExp
Afghanistan: 12 Africa :624 Min. :1952 Min. :23.60
Albania : 12 Americas:300 1st Qu.:1966 1st Qu.:48.20
Algeria : 12 Asia :396 Median :1980 Median :60.71
Angola : 12 Europe :360 Mean :1980 Mean :59.47
Argentina : 12 Oceania : 24 3rd Qu.:1993 3rd Qu.:70.85
Australia : 12 Max. :2007 Max. :82.60
(Other) :1632
pop gdpPercap
Min. :6.001e+04 Min. : 241.2
1st Qu.:2.794e+06 1st Qu.: 1202.1
Median :7.024e+06 Median : 3531.8
Mean :2.960e+07 Mean : 7215.3
3rd Qu.:1.959e+07 3rd Qu.: 9325.5
Max. :1.319e+09 Max. :113523.1
11.1.4 Informacja o zbiorze w tabeli
table(gapminder$continent, gapminder$year)
1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 2002 2007
Africa 52 52 52 52 52 52 52 52 52 52 52 52
Americas 25 25 25 25 25 25 25 25 25 25 25 25
Asia 33 33 33 33 33 33 33 33 33 33 33 33
Europe 30 30 30 30 30 30 30 30 30 30 30 30
Oceania 2 2 2 2 2 2 2 2 2 2 2 2
11.2 📘 Wybrane wykresy dla danych ze zbioru ‘gapminder’
11.2.1 ️️✔️ Wykresy przedstawiają jednocześnie dane z wielu różnych lat
11.2.2 ️️✔️ Do konstrukcji wykresów w tej części wykorzystano dostępny w R zbiór gapminder
11.2.3 Wykres słupkowy - podstawowa konstrukcja
ggplot(gapminder, aes(x=continent)) + geom_bar()
11.2.4 Wykres słupkowy - dodanie kolorów
ggplot(gapminder, aes(x=continent, fill=continent)) + geom_bar()
11.2.5 Wykres słupkowy - dodanie etykiety legendy
ggplot(gapminder, aes(x=continent, fill=continent)) + geom_bar()+labs(fill='Kontynent')
11.2.6 Wykres słupkowy - usunięcie legendy
ggplot(gapminder, aes(x=continent, fill=continent)) + geom_bar()+guides(fill='none')
11.2.7 Wykres zapamiętany w obiekcie rys
=ggplot(gapminder, aes(x=continent, fill=continent)) + geom_bar()+guides(fill='none') rys
11.2.8 Wykres słupkowy - transformacja skali
+ coord_trans(y="sqrt") rys
11.2.9 Wykres słupkowy - współrzędne biegunowe
+ coord_polar() rys
11.2.10 Wykres słupkowy - poziomy
+coord_flip() rys
11.2.11 Wybrane państwa - wykres liniowy
<- c("Poland", "Germany", "Czech Republic", "Austria","Romania")
kraje ggplot(subset(gapminder, country %in% kraje),
aes(x = year, y = lifeExp, color = country)) + geom_line() + geom_point()+
theme(legend.position='bottom') ####
11.2.12 Wykres gęstości
ggplot(gapminder, aes(lifeExp)) +
geom_density()
11.2.13 Wykres gęstości z dodatkowymi parametrami
ggplot(gapminder, aes(lifeExp)) +
geom_density(linewidth=1.5, fill="blue", alpha=0.6)
11.2.14 Histogram
ggplot(gapminder, aes(lifeExp)) +
geom_histogram( binwidth=4, color="black", fill="lightblue", alpha=0.5)
11.2.15 Histogram i gęstość
ggplot(gapminder, aes(lifeExp)) +
geom_histogram(aes(y=after_stat(density)), binwidth=4, color="black", fill="lightblue", alpha=0.5)+
geom_density()
11.2.16 Histogram i gęstość - dodatkowe parametry
ggplot(data=gapminder, aes(x=lifeExp)) +
geom_histogram(aes(y=after_stat(density)), binwidth=4, color="black", fill="lightblue", alpha=0.5)+
geom_density(linewidth=1.5, fill="pink", alpha=0.2)
11.2.17 Gęstości dla poszczególnych kontynentów
ggplot(data=gapminder, aes(x=lifeExp, fill=continent)) +
geom_density(alpha=0.3)
11.2.18 Utworzenie obiektu rys1
<- ggplot(gapminder, aes(continent, lifeExp, fill=continent)) rys1
11.2.19 Wyświetlenie obiektu rys1
z reprezentacją graficzną boxplot
+
rys1 geom_boxplot(outlier.size=2)
11.2.20 Wyświetlenie obiektu rys1
z reprezentacją graficzną violin
+
rys1 geom_violin()
11.2.21 Konstrukcja i wyświetlenie obiektu rys2
<- ggplot(data=gapminder,
rys2 aes(x=gdpPercap, y=lifeExp))
rys2
11.2.22 Wyświetlenie obiektu rys2
z reprezentacją graficzną point
11.2.23 UWAGA: na wykresie zamieszczono jednocześnie dane z różnych lat
+ geom_point() rys2
11.2.24 Wyświetlenie obiektu rys2
z reprezentacją graficzną point
i kolorami dla kontynentów
+ geom_point(aes(color=continent)) rys2
11.2.25 Wyświetlenie obiektu rys2
z reprezentacją graficzną violin
, kolorami dla kontynentów w oddzielnych oknach
+
rys2geom_point(aes(color=continent)) +
facet_grid(year~continent)
11.3 📘 Animacje w ggplot2 - pakiet gganimation
11.3.1 ❕ Załadowanie bibliotek dla animacji
library(gganimate)
library(gifski)
11.3.2 Utworzenie obiektu p
<- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = country)) +
p geom_point(alpha = 0.7) +
theme(legend.position = 'none') +
labs(title = 'Rok: {frame_time}', x = 'PKB na osobę', y = 'oczekiwana długość życia') +
transition_time(year)
11.3.3 Wyświetlenie obiektu p
p
11.3.4 Utworzenie obiektu p
<- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = country)) +
p geom_point(alpha = 0.7) +
theme(legend.position = 'none') +
facet_wrap(~continent) +
labs(title = 'Rok: {frame_time}', x = 'PKB na osobę', y = 'oczekiwana długość życia') +
transition_time(year)
11.3.5 Wyświetlenie obiektu p
p
11.3.6 Uruchomienie animacji
animate(p, 100, 10)
11.3.7 Uruchomienie animacji z parametrami
animate(p, nframes=100, fps=10,height = 20, width = 30, units = "cm",res=150)
11.3.8 Animacja - określenie różnych parametrów
<- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = country)) +
p geom_point(alpha = 0.7) +
theme(legend.position = 'none') +
facet_wrap(~continent) +
labs(title = 'Rok: {frame_time}', x = 'PKB na osobę', y = 'oczekiwana długość życia') +
transition_time(year)+
scale_colour_manual(values = country_colors) +
scale_size(range = c(2, 12)) +
scale_x_log10() +
facet_wrap(~continent) +
theme(legend.position = 'none') +
labs(title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') +
transition_time(year) +
ease_aes('linear')
p
11.4 📘 Zapisanie animacji w pliku gif i wyświetlenie w zewnętrznym oknie
<- function(){
makeplot <- split(gapminder, gapminder$year)
datalist lapply(datalist, function(data){
<- ggplot(data, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
p scale_size("population", limits = range(gapminder$pop)) + geom_point() + ylim(20, 90) +
scale_x_log10(limits = range(gapminder$gdpPercap)) + ggtitle(data$year) + theme_classic()
print(p)
})
}<- file.path(tempdir(), 'gapminder.gif')
gif_file save_gif(makeplot(), gif_file, 1280, 720, res = 144)
::browseURL(gif_file) utils